﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SushiRESTServices.Dominio;
using NHibernate;
using System.Data.SqlClient;

namespace SushiRESTServices.Persistencia
{
    public class PersonaDAO
    {
        public Persona CrearPersona(Persona personaACrear)
        {
            Persona personaCreada = null;
            string sql = "INSERT INTO Persona VALUES (@IdPersona, @TipoDocIden, @NumDocIden, @Nombres, @Apellidos, @FecNacimiento, @Telefono, @Direccion, @Email, @TipoPersona)";
            int maxIdUnidad = 0;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    maxIdUnidad = ObtenerIdCorrelativo();

                    com.Parameters.Add(new SqlParameter("@IdPersona", maxIdUnidad));
                    com.Parameters.Add(new SqlParameter("@TipoDocIden", personaACrear.TipoDocIden));
                    com.Parameters.Add(new SqlParameter("@NumDocIden", personaACrear.NumDocIden));
                    com.Parameters.Add(new SqlParameter("@Nombres", personaACrear.Nombres));
                    com.Parameters.Add(new SqlParameter("@Apellidos", personaACrear.Apellidos));
                    com.Parameters.Add(new SqlParameter("@FecNacimiento", personaACrear.FecNacimiento));
                    com.Parameters.Add(new SqlParameter("@Telefono", personaACrear.Telefono));
                    com.Parameters.Add(new SqlParameter("@Direccion", personaACrear.Direccion));
                    com.Parameters.Add(new SqlParameter("@Email", personaACrear.Email));
                    com.Parameters.Add(new SqlParameter("@TipoPersona", personaACrear.TipoPersona));
                    com.ExecuteNonQuery();

                }
            }
            personaCreada = obtenerPersonaPorDNI(personaACrear.NumDocIden);
            return personaCreada;
        }

        public Persona obtenerPersonaPorDNI(string dni)
        {
            Persona personaEncontrado = null;
            string sql = "SELECT * FROM persona WHERE NumDocIden=@dni";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@dni", dni));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            personaEncontrado = new Persona()
                            {

                                IdPersona = (int)resultado["IdPersona"],
                                TipoDocIden = (string)resultado["TipoDocIden"],
                                NumDocIden = (string)resultado["NumDocIden"],
                                Nombres = (string)resultado["Nombres"],
                                Apellidos = (string)resultado["Apellidos"],
                                FecNacimiento = (string)resultado["FecNacimiento"],
                                Telefono = (string)resultado["Telefono"],
                                Direccion = (string)resultado["Direccion"],
                                Email = (string)resultado["Email"],
                                TipoPersona = (string)resultado["TipoPersona"]

                            };
                        }
                    }
                }
            }
            return personaEncontrado;
        }

        public Persona obtenerPersonaPorID(int IdPersona)
        {
            Persona personaEncontrado = null;
            string sql = "SELECT * FROM persona WHERE IdPersona=@id";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@id", IdPersona));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            personaEncontrado = new Persona()
                            {

                                IdPersona = (int)resultado["IdPersona"],
                                TipoDocIden = (string)resultado["TipoDocIden"],
                                NumDocIden = (string)resultado["NumDocIden"],
                                Nombres = (string)resultado["Nombres"],
                                Apellidos = (string)resultado["Apellidos"],
                                FecNacimiento = (string)resultado["FecNacimiento"],
                                Telefono = (string)resultado["Telefono"],
                                Direccion = (string)resultado["Direccion"],
                                Email = (string)resultado["Email"],
                                TipoPersona = (string)resultado["TipoPersona"]

                            };
                        }
                    }
                }
            }
            return personaEncontrado;
        }

        public int ObtenerIdCorrelativo()
        {
            int  idMax = 0;
            string sql = "SELECT isNull(max(IdPersona),0) as Id FROM persona ";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            idMax = (int)resultado["Id"];
                        }
                    }
                }
            }

            return (idMax + 1);


            //return 
        }

       
    }
}